package w83a.w83aOperacionesInternas.w83aLotesPreavisos;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;

import w83a.w83aBeans.W83aDocumentoBean;
import w83a.w83aBeans.W83aLotesPreavisosBean;
import w83a.w83aBeans.W83aUsuarioXLNetsBean;
import w83a.w83aUtilidadesComunes.W83ABase64;
import w83a.w83aUtilidadesComunes.W83ASolicitudPreaviso;
import w83a.w83aUtilidadesComunes.W83aClsTrazas;

import es.ejie.frmk.negocio.operacioninterna.Q70OperacionInterna;
import es.ejie.frmk.negocio.operacioninterna.Q70OperacionInternaConfigBean;
import es.ejie.frmk.negocio.operacioninterna.Q70OperacionInternaError;
import es.ejie.frmk.negocio.operacioninterna.Q70OperacionInternaErrors;

import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;

public class W83aLotesPreavisosAnyadirOIAction extends Q70OperacionInterna{
	/**
	 * preProcessMappingEntrada
	 * @param contexto a
	 * @param configBean a
	 * @param errors a
	 * @throws Exception e
	 */				
	protected void preProcessMappingEntrada(Q70ContextoEJIE contexto, Q70OperacionInternaConfigBean configBean, Q70OperacionInternaErrors errors) throws Exception{				
		
				
		if (contexto.get("w83aMapaFilePreavisos")!=null){
			W83aLotesPreavisosBean lote = (W83aLotesPreavisosBean)contexto.get("w83aPreavisosNuevoBean");

			W83aUsuarioXLNetsBean usuario = (W83aUsuarioXLNetsBean)contexto.get("w83aUsuarioXLNets");
			usuario.setIdioma((String)contexto.get("w83aCgaIdioma"));
			lote.setCodPromotor("");
			HashMap mapaFiles =(HashMap)contexto.get("w83aMapaFilePreavisos");
			Iterator iter = mapaFiles.keySet().iterator();
			W83aDocumentoBean docBean=null;
			//String territorio = W83aUtilidadesN38API.elegirProvinciaDelegacion(usuario.getPerfilXLNets());
			String territorio = usuario.getCodTerritorioDelegacion();

			while (iter.hasNext())
			{
				HashMap datosFile=(HashMap)mapaFiles.get(iter.next());
				docBean= new W83aDocumentoBean();//NOPMD
				String nombrefichero=(String)datosFile.get("nombreDocumento");
				docBean.setNombre(nombrefichero);
				contexto.set("nombreFichero", nombrefichero);
				docBean.setUsuario(usuario);
				
				
				
				InputStream i = (InputStream)datosFile.get("documentoStream");
				//byte[] temporal = (byte[])docBean.getFileData().;

				//pasamos a un string el contenido del fichero para poder mostrar
				byte[] bytes = new byte[1024*1024*2];//NOPMD
				int leido = 0;
			    ByteArrayOutputStream b = new ByteArrayOutputStream();//NOPMD
			    while ((leido = i.read(bytes)) != -1)
			        b.write(bytes,0,leido);
			    byte[] b2 = b.toByteArray();
		
			    InputStream is1 = new ByteArrayInputStream(b2);//NOPMD
			    //InputStream is2 = new ByteArrayInputStream(b2);//NOPMD
			    
			    String caracter = new String(b2, "ISO-8859-1");//NOPMD
			    
			    //Necesito documentoImportadoOriginal para crear la notificación.
				contexto.set("documentoImportadoOriginal", caracter);
				
				docBean.setFileData(is1);
				docBean.setTamanyo(((Long)datosFile.get("tamanyo")).intValue());
				lote.getListaDocs().add(docBean);
				
				
				//W83aClsTrazas.trazaDebug(null, "@@@@@@@@@@@ firma @@@@@@@@@@@@ ruta=" + ruta);
				//InputStream is = new FileInputStream("C://Documents and Settings//emartinez//Escritorio//con idInterno nuevo de 50//preavisos_01_201_001_20100722.txt");
				/*FileChannel src = new FileInputStream("C://Documents and Settings//emartinez//Escritorio//con idInterno nuevo de 50//preavisos_01_201_001_20100722.txt").getChannel();
				FileChannel dest = new FileOutputStream("http://localhost:8100/w83afrm/js/lotesPreavisos/preavisos_01_201_001_20100722.txt").getChannel();
				dest.transferFrom(src, 0, src.size());*/
				//File fileToSend;
				//InputStream fileStream = new BufferedInputStream(fileToSend);

				/*Socket connection = new Socket("http://localhost:8100/w83afrm/js/lotesPreavisos/", 8100);
				OutputStream os = connection.getOutputStream();*/

				// my method to move data from the file inputstream to the output stream of the socket
				//copyStream(fileStream, out);
				
				//Esto si utilizábamos el file en el addInput del js-->Necesito copiar el fichero a una ruta nuestra porque por seguridad de los navegadores, en el input del fichero no aparece la ruta completa
				//Para saber dónde está el fichero
				//String ruta= W83AProperties.getProperty("w83a", "PREFIJO_URL_ESTATICO");
				//String ruta= W83AProperties.getProperty("w83a", "file.out");
				//W83aClsTrazas.trazaDebug(null, "cambiado por evaaaaaaaaaaaa staticPath=" + ruta);
				/*OutputStream os = new FileOutputStream(ruta+nombrefichero);
				byte[] buffer = new byte[1024];
	            int bytesRead;
	            while((bytesRead = is1.read(buffer)) !=-1){
	                os.write(buffer, 0, bytesRead);
	            }
	            is1.close();
	            os.flush();
	            os.close();*/
				
	            //Necesitamos la variable nombredocImportadoOriginal para pasársela a la firma, se tiene que firmar el fichero, no el contenido
	            //String rutaleer= W83AProperties.getProperty("w83a", "fileleer.out");
	            //W83aClsTrazas.trazaDebug(null, "@@@@@@@@@@@ firma @@@@@@@@@@@@ rutaleer=" + rutaleer);
	            //contexto.set("nombredocImportadoOriginal", "http://localhost:8100/w83afrm/js/lotesPreavisos/"+nombrefichero);
	            String pasarInput = W83ABase64.encode(b2);
			    W83aClsTrazas.trazaDebug(null, "@@@@@@@@@@@ firma @@@@@@@@@@@@ pasarInput=" + pasarInput.replaceAll("\r\n",""));
	            //contexto.set("ficheroBinarioBase64", pasarInput.replaceAll("\r\n",""));
			    contexto.set("ficheroBinarioBase64", pasarInput);
				
				W83ASolicitudPreaviso documento = new W83ASolicitudPreaviso();//NOPMD
				//documento.extraerInformacion(caracter, contexto.get(W83aClsConstantes.XLNETS_PERSONTYPE).toString(), territorio);
				documento.extraerInformacion(caracter, territorio);
				
				//String tesxtoPlano = documento.getTxtPlano(usuario.getIdioma());
				//Añado lo del sindicato para el libro de registro de la firma
				contexto.set("sindicato", documento.getSindicato());
			
				contexto.set("solicitudPreaviso", documento);

			}
			lote.setListaDocs2(lote.getListaDocs());
		}
		super.preProcessMappingEntrada(contexto, configBean, errors);
			
	}
	
	/**
	 * postProcessMappingSalida
	 * @param contexto a
	 * @param errors a
	 * @throws Exception e
	 */
	protected void postProcessMappingSalida(Q70ContextoEJIE contexto, Q70OperacionInternaErrors errors) throws Exception {

		HashMap resultado = (HashMap)contexto.get("w83aResultadoMapa");
		
		contexto.set("w83aResultadoMapa",resultado);
		
	
		contexto.set("codSelec",(String)resultado.get("codSelec"));
		contexto.set("errorFichero",(String)resultado.get("error"));
		
		
		
		
		super.postProcessMappingSalida(contexto, errors);
	}
	
	protected void processOIException(Q70ContextoEJIE paramQ70ContextoEJIE, Exception paramException, Q70OperacionInternaErrors paramQ70OperacionInternaErrors)
	throws Exception{
		/*if(null!=paramException&&null!=((Q70OperacionInternaException)paramException).getPrimaryException() && ((Q70OperacionInternaException)paramException).getPrimaryException() instanceof W83aLibroRegistroExceptio){
			paramQ70OperacionInternaErrors.add("OI_ERROR", new Q70OperacionInternaError("error.mensaje.errorRegistroEntrada"));
		}else{*/
			paramQ70OperacionInternaErrors.add("OI_ERROR", new Q70OperacionInternaError(getConfiguracion().getOiErrorKey()));			
		//}
	}
}